/**栈接口
 *
 */
export interface IStack<T> {
  /** 出栈
   *
   */
  pop(): T | undefined;

  /**入栈
   *
   * @param item 泛型约束元素
   */
  push(item: T): number;

  /**显示栈顶元素
   *
   */
  peek(): T | undefined;

  /** toString的方法
   *
   */
  toStr(): string;

  /** 清空栈
   * 清除所有栈元素；
   */
  clear(): void;

  /** 栈元素数量*/
  get size(): number;

  /** 是否为空栈 */
  get isEmpty(): boolean;
}

/** 定义栈的对象结构 */
export interface IObjStack<T> {
  [propName: number]: T;
}

// type IStackTemp<T> = Pick<Array<T>, "push" | "pop" | "length" | "toString">;
// interface IStackOther<T> {
//   Peek: () => T | undefined;
//   /** 栈元素数量*/
//   get size(): number;

//   /** 是否为空栈 */
//   get isEmpty(): boolean;
// }

// export type IStackOtherTemp<T> = IStackTemp<T> & IStackOther<T>;
